#include "instructions/loads/iload.h"

namespace jvm {
namespace instructions {

void iLoad(std::shared_ptr<rtda::Frame> p_frame, uint32_t index) {
    int32_t val = p_frame->getLocalVars().getInt(index);
    p_frame->getOperandStack()->pushInt(val);
}

// Load int from local variable
void ILOAD::execute(std::shared_ptr<rtda::Frame> frame)  {
    iLoad(frame, _index);
}

void ILOAD_0::execute(std::shared_ptr<rtda::Frame> frame)  {
    iLoad(frame, 0);
}

void ILOAD_1::execute(std::shared_ptr<rtda::Frame> frame)  {
    iLoad(frame, 1);
}

void ILOAD_2::execute(std::shared_ptr<rtda::Frame> frame)  {
    iLoad(frame, 2);
}

void ILOAD_3::execute(std::shared_ptr<rtda::Frame> frame)  {
    iLoad(frame, 3);
}


} // namespace instructions
} // namespace jvm